<?php declare(strict_types=1);
/**
 * Created by IntelliJ IDEA
 * Author: 张伯发
 * Date  : 2019/11/19
 * Time  : 17:47
 */

namespace Xiaoproject\Common;


use Swoft\Stdlib\Helper\PhpHelper;

abstract class StaticBuilder
{
    public function __call($method, $parameters)
    {
        return PhpHelper::call([$this->newBuilder(), $method], ...$parameters);
    }

    // 这里静态方法调用会触发，然后创建子类时调用对应的方法，如果方法不存在，触发 __call方法，调用Builder中的方法
    public static function __callStatic($method, $parameters)
    {
        return (new static())->$method(...$parameters);
    }

    /**
     *
     * @return object Builder
     * @author 张伯发 2019/11/18 23:16
     */
    public abstract function newBuilder();

}
